<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>index_extend_1</title>
</head>

<body>
    再次学习JavaScript继承和原型
</body>
<script type="text/javascript">
/**
	Constructor 保存着用于创建当前对象的函数  （构造函数）
	hasOwnProperty(propertyName) 用于检测给定的属性在当前对象实例中（不是原型中）是否存在
	isPrototypeOf(Object) 用于检查传入的对象是否是另一个对象的原型
	propertyIsEnumerable()是用来检测属性是否属于某个对象的  是否能够使用for-in 语句枚举
	toLocaleString 方法返回一个 String 对象，这个对象中包含了用当前区域设置的默认格式表示的日期。与执行环境地区对应
	valueOf() 返回对象的字符串 数值 布尔表示
	p instanceof Person 对象是否是模板的实例
	*/
/**
prototype 创建每一个函数都有一个prototype属性，这个属性其实是一个指针，而这个指针总指向一个对象
这个对象的用途就是将特定的属性和方法包含在内，起到一个所有实例所共享的作用

*/


(function() {
    var Person = function(name) {
        this.name = name;
    };

    Person.prototype.getName = function() {
        return this.name;
    };

    var Student = function(name, sex, id) {
        this.name = name || '无名氏';
        this.sex = sex || '不明';
        this.id = id || '未填'; //学号
    };

    //相当于将其prototype复制了一次，若是包含constructor的话将指向Person
    Student.prototype = new Person();
    Student.prototype.getId = function() {
            return this.id;
        }
        // Student.prototype.constructor = Student;

    var y = new Person();
    var s = new Student;
    var s1 = y instanceof Person;
    var s2 = s instanceof Student;
    var s3 = s instanceof Person;
    var s4 = Student.prototype.constructor === Person;
    var s5 = Student.constructor === Person; // false
    var s6 = Student.constructor === Function;

    var s = '';

    console.log(s1);
    console.log(s2);
    console.log(s3);
    console.log(s4);
    console.log(s5);
    console.log(s6);


    

})();
</script>

</html>
